package pickbook.controller;


import javax.annotation.Resource;
import javax.servlet.http.HttpSession;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;

import pickbook.model.AdminService;
import pickbook.model.AdminVO;
import pickbook.model.ListVO;

//관리자 관련 컨트롤러 정의
@Controller
public class AdminController {
	
	@Resource(name = "adminServiceImpl")
	private AdminService adminService;
	
	/**
	 * method : loginAdmin
	 * comment : 관리자 로그인 작업 후 성공여부에 따라 viewName 반환
	 * 
	 * @param session
	 * @param avo
	 * @return
	 * 
	 * @author 제형규
	 * @date 2014-07-04
	 */
	@RequestMapping(value="loginAdmin.do",method=RequestMethod.POST)
	public String loginAdmin(HttpSession session, AdminVO avo){
		
		AdminVO alvo=adminService.loginAdmin(avo);//관리자 로그인 수행
		String viewName="admin.login_fail";
		
		if(alvo!=null){//관리자 정보가 존재
			viewName="admin.login_ok";
			session.setAttribute("avo", alvo);
		}
		
		return viewName;
		
	}
	
	/**
	 * method : loginAdminView
	 * comment : 관리자 로그인 화면 페이지로 이동하는 메서드
	 * 
	 * @return
	 * 
	 * @author 제형규
	 * @date 2014-07-04
	 */
	@RequestMapping("loginAdminView.do")
	public String loginAdminView(){
		
		return "admin.login";
		
	}
	
	/**
	 * method : logoutAdmin
	 * comment : 관리자 로그아웃하는 메서드
	 * 
	 * @return
	 * 
	 * @author 제형규
	 * @date 2014-07-04
	 */
	@RequestMapping("admin_logout.do")
	public String logoutAdmin(HttpSession session){
		
		session.invalidate();//세션 종료
		return "redirect:admin_main.do";
		
	}
	
	/**
	 * method : main
	 * comment : 관리자 메인 페이지로 이동하는 메서드
	 * 
	 * @return
	 * 
	 * @author 제형규
	 * @date 2014-07-04
	 */
	@RequestMapping("admin_main.do")
	public String main(){
		
		return "admin.main";
		
	}
	
	/**
	 * method : getAllSaleBookList
	 * comment : 전체 판매도서 목록 반환
	 * @param pageNo
	 * @return
	 * 
	 * @author 제형규
	 * @date 2014-07-04
	 */
	@RequestMapping("admin_salebooklist.do")
	public ModelAndView getAllSaleBookList(String pageNo) {
		
		ModelAndView mv = new ModelAndView();
		
		ListVO lvo=adminService.getRecentSaleBookList(pageNo);

		if(lvo.getList().size() != 0){//조건에 맞는 도서가 있을 경우
			mv.addObject("salebooklvo", lvo);//ModelAndView 판매도서 목록 추가
		}else{//없을 경우
			mv.addObject("noData",false);
		}
		mv.setViewName("admin.salebooklist");

		return mv;
		
	}
	
	/**
	 * method : getAllBuyBookList
	 * comment : 전체 희망도서 목록을 반환
	 * 
	 * @param pageNo
	 * @return
	 * 
	 * @author 제형규
	 * @date 2014-07-04
	 */
	@RequestMapping("admin_buybooklist.do")
	public ModelAndView getAllBuyBookList(String pageNo){
		
		ModelAndView mv = new ModelAndView();
		
		ListVO lvo=adminService.getRecentBuyBookList(pageNo);

		if(lvo.getList().size() != 0){//조건에 맞는 도서가 있을 경우
			mv.addObject("buybooklvo", lvo);//ModelAndView 희망도서 목록 추가
		}else{//없을 경우
			mv.addObject("noData",false);
		}
		mv.setViewName("admin.buybooklist");
		
		return mv;
	}
	
	/**
	 * method : memberList
	 * comment : 전체 회원정보 목록을 반환하는 메서드
	 * 
	 * @param pageNo
	 * @return
	 * 
	 * @author 제형규
	 * @date 2014-07-04
	 */
	@RequestMapping("admin_memberlist.do")
	public ModelAndView memberList(String pageNo){
		
		ModelAndView mv = new ModelAndView();
		
		ListVO lvo=adminService.memberList(pageNo);

		if(lvo.getList().size() != 0){
			mv.addObject("memberlvo",lvo);//ModelAndView에 전체 회원목록 추가
		}else{
			mv.addObject("noData",false);
		}
		
		mv.setViewName("admin.memberlist");
		
		return mv;
		
	}
	
	/**
	 * method : deleteBuyBook
	 * comment : 희망도서 삭제하는 메서드
	 * 
	 * @param no
	 * @return
	 * 
	 * @author 제형규
	 * @date 2014-07-04 
	 */
	@RequestMapping("admin_deleteBuybook.do")
	public String deleteBuyBook(int no) {
		
		adminService.deleteBuyBook(no);//희망도서 삭제
		return "redirect:admin_buybooklist.do";
		
	}
	
	/**
	 * method : deleteSaleBook
	 * comment : 판매도서 삭제하는 메서드
	 * 
	 * @param no
	 * @return
	 * 
	 * @author 제형규
	 * @date 2014-07-04 
	 */
	@RequestMapping("admin_deleteSaleBook.do")
	public String deleteSaleBook(int no) {
		
		adminService.deleteSaleBook(no);//판매도서 삭제
		return "redirect:admin_salebooklist.do";
		
	}
	
	/**
	 * method : deleteMember
	 * comment : 회원을 삭제하는 메서드
	 * 
	 * @param id
	 * @return
	 * 
	 * @author 제형규
	 * @date 2014-07-04 
	 */
	@RequestMapping("admin_deleteMember.do")
	public String deleteMember(String id) {
		
		adminService.deleteMember(id);//회원 삭제
		return "redirect:admin_memberlist.do";
		
	}
	
	/**
	 * method : searchMember
	 * comment : 검색어에 따른 회원정보 메서드
	 * 
	 * @param factor
	 * @param pageNo
	 * @return
	 * 
	 * @author 제형규
	 * @date 2014-07-04 
	 */
	@RequestMapping("admin_searchMember.do")
	public ModelAndView searchMember(String factor,String pageNo){
		
		ModelAndView mv=new ModelAndView();
		
		ListVO lvo=adminService.searchMember(factor, pageNo);
		
		if(lvo.getList().size() == 0){//검색결과가 존재하지 않으면
			mv=new ModelAndView("admin.memberlist", "noData", false  );
		}else{//존재할 경우
			mv=new ModelAndView("admin.memberlist", "memberlvo", lvo  );
		}
		
		return mv;
		
	}
	
	/**
	 * method : searchSaleBook
	 * comment : 검색어에 따른 판매도서 메서드
	 * 
	 * @param factor
	 * @param pageNo
	 * @return
	 * 
	 * @author 제형규
	 * @date 2014-07-04 
	 */
	@RequestMapping("admin_searchSaleBook.do")
	public ModelAndView searchSaleBook(String factor,String pageNo){
ModelAndView mv=new ModelAndView();
		
		ListVO lvo=adminService.searchSaleBook(factor, pageNo);
		
		if(lvo.getList().size() == 0){//검색결과가 존재하지 않으면
			mv=new ModelAndView("admin.salebooklist", "noData", false  );
		}else{//존재할 경우
			mv=new ModelAndView("admin.salebooklist", "salebooklvo",  lvo);
		}
		
		return mv;
		
	}
	
	/**
	 * method : searchBuyBook
	 * comment : 검색어에 따른 판매도서 메서드
	 * 
	 * @param factor
	 * @param pageNo
	 * @return
	 * 
	 * @author 제형규
	 * @date 2014-07-04 
	 */
	@RequestMapping("admin_searchBuyBook.do")
	public ModelAndView searchBuyBook(String factor,String pageNo){
		
		ModelAndView mv=new ModelAndView();
		
		ListVO lvo=adminService.searchBuyBook(factor, pageNo);
		if(lvo.getList().size() == 0){//검색결과가 존재하지 않으면
			mv=new ModelAndView("admin.buybooklist", "noData", false  );
		}else{//존재할 경우
			mv=new ModelAndView("admin.buybooklist", "buybooklvo", lvo );
		}
		
		return mv;
		
	}
}
